#pragma once

#pragma managed

#include "IUnitController.h"

namespace BroodWar
{
	namespace Addon
	{
		public interface class IUnitArbitrator
		{
			bool SetBid(IUnitController^ controller, Unit^ unit, double bid);
			bool SetBid(IUnitController^ controller, IEnumerable<Unit^>^ units, double bid );
			bool RemoveBid(IUnitController^ controller, Unit^ unit);
			bool RemoveBid(IUnitController^ controller, IEnumerable<Unit^>^ units);
			bool RemoveAllBids(IUnitController^ controller);
			bool RemoveController(IUnitController^ controller);
			bool Accept(IUnitController^ controller, Unit^ unit, double bid );
			bool Accept(IUnitController^ controller, IEnumerable<Unit^>^ units, double bid );
			bool Accept(IUnitController^ controller, Unit^ unit);
			bool Accept(IUnitController^ controller, IEnumerable<Unit^>^ units);
			bool Decline(IUnitController^ controller, Unit^ unit, double bid );
			bool Decline(IUnitController^ controller, IEnumerable<Unit^>^ units, double bid );
			bool HasBid(Unit^ unit);
			//Tuple<IUnitController^, double>^ GetHighestBidder(Unit^ unit);
			//List<Tuple<IUnitController^, double>^>^ GetAllBidders(Unit^ unit);
			HashSet<Unit^>^ GetObjects(IUnitController^ controller);
			HashSet<Unit^>^ GetObjectsBidOn(IUnitController^ controller);
			void OnRemoveObject(Unit^ unit);
			//double GetBid(IUnitController^ controller, Unit^ unit);
			void Update();
		};
	}
}
